/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.unipar.cursoweb.controle;


import br.com.unipar.cursoweb.modelo.Cidade;
import br.com.unipar.cursoweb.modelo.Cliente;
import br.com.unipar.cursoweb.modelo.Estado;
import br.com.unipar.cursoweb.service.CidadeService;
import br.com.unipar.cursoweb.service.ClienteService;
import java.io.IOException;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;
import javax.inject.Named;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Thiago Marques
 */
@Controller
@Scope("request")
@Named("clienteBean")
public class ClienteBean {

    private final ClienteService clienteService;
    private final CidadeService cidadeService;
    private Cliente cliente = new Cliente();
    private List<Cliente> clientes;
    private String nomeConsulta;
    private Estado estado;
    private List<Estado> estados;
    private List<Cidade> cidades;

    @Autowired
    public ClienteBean(ClienteService clienteService, CidadeService cidadeService) {
        this.cidadeService = cidadeService;
        this.clienteService = clienteService;
    }

    @PostConstruct
    public void init() {
        estados = cidadeService.getEstados();
    }

    public void listaCidades(AjaxBehaviorEvent event) {
        cidades = cidadeService.getCidades(estado);
    }

    public String novo() {
        cliente = new Cliente();
        return "/gestao/clienteForm.jsf";
    }

    public void salvar(ActionEvent event) {
        try {
            clienteService.salvar(cliente);
            FacesContext.getCurrentInstance().getExternalContext().redirect("clienteLista.jsf");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public String editar() {
        estado = cliente.getCidade().getEstado();
        listaCidades(null);
        return "/gestao/clienteForm.jsf";
    }

    public void consultar(ActionEvent event) {
        clientes = clienteService.consultar(nomeConsulta);
    }

    public void excluir(ActionEvent event) {
        clienteService.excluir(cliente);
        clientes = null;
    }

    public List<Cidade> getCidades() {
        return cidades;
    }

    public void setCidades(List<Cidade> cidades) {
        this.cidades = cidades;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public Estado getEstado() {
        return estado;
    }

    public void setEstado(Estado estado) {
        this.estado = estado;
    }

    public List<Estado> getEstados() {
        return estados;
    }

    public void setEstados(List<Estado> estados) {
        this.estados = estados;
    }

    public List<Cliente> getClientes() {
        return clientes;
    }

    public void setClientes(List<Cliente> clientes) {
        this.clientes = clientes;
    }

    public String getNomeConsulta() {
        return nomeConsulta;
    }

    public void setNomeConsulta(String nomeConsulta) {
        this.nomeConsulta = nomeConsulta;
    }
}
